﻿#region Copyright Notice
// 
// 
// Copyright (c) 2009-2010 Anindya Chatterjee
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// 
// 
// 
#endregion
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using GCore;

namespace GCodeIssueTracker
{
    /// <summary>
    /// Issue entry class for the Google project hosting service.
    /// </summary>
    [XmlRoot("entry", Namespace = "http://www.w3.org/2005/Atom")]
    public class IssuesEntry : GEntry
    {
        /// <summary>Gets and sets the closed date.</summary>
        [XmlElement("closedDate", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public DateTime ClosedDate { get; set; }

        /// <summary>
        /// Gets and sets the id of the issue.
        /// </summary>
        [XmlElement("id", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public int Id { get; set; }

        /// <summary>Gets and sets the labels associated with the issue.</summary>
        [XmlElement("label", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public List<string> Labels { get; set; }

        /// <summary>Gets and sets the owner of the issue.</summary>
        [XmlElement("owner", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public Owner Owner { get; set; }

        /// <summary>Gets and sets the stars associated to the issue.</summary>
        [XmlElement("stars", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public string Stars { get; set; }

        /// <summary>Gets and sets the state of the issue.</summary>
        [XmlElement("state", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public string State { get; set; }

        /// <summary>Gets and sets the status of the issue.</summary>
        [XmlElement("status", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public string Status { get; set; }

        /// <summary>
        /// Gets and sets the cc fields associated with the issue.
        /// </summary>
        [XmlElement("cc", Namespace = "http://schemas.google.com/projecthosting/issues/2009")]
        public List<Cc> Ccs { get; set; }

        /// <summary>
        /// Adds project hosting xml namespaces before serialization.
        /// </summary>
        public override void Close()
        {
            base.Close();
            XmlNamespaceCollection.Add("issues", "http://schemas.google.com/projecthosting/issues/2009");
        }
    }
}